#include <Arduino.h>


int seg_1 = 5;
int seg_2 = 18;
int seg_3 = 19;
int seg_4 = 21;

int seg_arr[] = {seg_1, seg_2, seg_3, seg_4};

// 定义段选线引脚;
int a = 32;
int b = 25;
int c = 27;
int d = 12;
int e = 13;
int f = 33;
int g = 26;
int dp = 14;

int led_arr[] = {a, b, c, d, e, f, g, dp};

// 共阳极
int number_array[][8] = {
    {0, 0, 0, 0, 0, 0, 1, 1}, // 0
    {1, 0, 0, 1, 1, 1, 1, 1}, // 1
    {0, 0, 1, 0, 0, 1, 0, 1}, // 2
    {0, 0, 0, 0, 1, 1, 0, 1}, // 3
    {1, 0, 0, 1, 1, 0, 0, 1}, // 4
    {0, 1, 0, 0, 1, 0, 0, 1}, // 5
    {0, 1, 0, 0, 0, 0, 0, 1}, // 6
    {0, 0, 0, 1, 1, 1, 1, 1}, // 7
    {0, 0, 0, 0, 0, 0, 0, 1}, // 8
    {0, 0, 0, 0, 1, 0, 0, 1}, // 9
};

void clear() {
   // 清屏幕
   for (int i = 0; i < 4; i++) {
    digitalWrite(seg_arr[i], LOW);
  }
  for (int i = 0; i < 8; i++) {
    digitalWrite(led_arr[i], HIGH);
  }
}

// 在seg_i上显示num
void display(int seg_i, int num) {
  clear();
  // 拉低位选线
  digitalWrite(seg_arr[seg_i], HIGH);
  // 显示数据
  for (int i = 0; i < 8; i++) {
    digitalWrite(led_arr[i], number_array[num][i]);
  }
}

void display4(int num) {
   // 清屏幕
   clear();
  // 数值的各个位数
  int num_digit_arr[4];
  for (int i = 3; i >= 0; i--) {
    num_digit_arr[i] = num % 10;
    num = num / 10;
  }
  for (int i = 0; i < 4; i++) {
    // 清屏幕
    display(i, num_digit_arr[i]);
    delay(5);
  }
}

void setup() {
  // put your setup code here, to run once:
  Serial.begin(115200);
  Serial.println("Hello, ESP32!");
  for (int i = 0; i < 4; i++) {
    pinMode(seg_arr[i], OUTPUT);
    digitalWrite(seg_arr[i], LOW);
  }
  for (int i = 0; i < 8; i++) {
    pinMode(led_arr[i], OUTPUT);
    digitalWrite(led_arr[i], HIGH);
  }
  // display4(1234);
}

void loop() {
  // for(int i = 0; i < 4; i++){
  //   for (int j = 0; j < 10; j++) {
  //     // 依次显示0-9
  //     display(i, j);
  //     delay(1000);
  //   }
  // }
  // display4(1234);
  
  for (int i = 9999; i > 9989; i--) {
    for (int j = 0; j < 100; j++) {
      display4(i);
    }
  }
}
